package com.zxl.study.confusion.v4;

import com.zxl.study.confusion.OrderDetailModel;
import com.zxl.study.confusion.OrderMainModel;

import java.util.List;

/**
 * @auther zxl
 * @create 2023-08-13 15:55
 *
 * 订单业务中，下单处理的策略模式的上下文
 */
public class OrderStrategyContext {
    /**
     * 持有下单处理的策略的算法实现
     */
    private OrderStrategy strategy;

    /**
     * 选择具体使用的下单处理的策略算法
     * @param OrderType 订单类型
     * @return 具体使用的下单处理的策略算法对象
     */
    private OrderStrategy selectOrderStrategy(int OrderType)
    {
        switch (OrderType)
        {
            //应该根据具体的实现类，从Spring中获取相应的Bean实例
            case 1 : return new NormalOrderServiceImpl();
        }

        return null;
    }

    public Long saveSaleOrder(OrderMainModel orderMainModel, List<OrderDetailModel> orderDetailModelList)
    {
        //1:先来选择具体的算法策略实现对象
        strategy = selectOrderStrategy(orderMainModel.getOrderType());
        //2：执行策略
        return strategy.saveSaleOrder(orderMainModel,orderDetailModelList);
    }

}
